import type { AxiosError } from 'axios';
import { ElMessage } from 'element-plus';

const RespDictionary: Record<number, string> = {
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '请求地址不存在，请检查您的网络',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。'
};

let isOpenErrMsg = false;
export const showError = (msg: string) => {
  if (isOpenErrMsg) return;
  isOpenErrMsg = true;
  // 弹出错误提示 具有ui库替换下面的方法
  ElMessage({
    message: msg,
    type: 'error',
    onClose() {
      isOpenErrMsg = false;
    }
  });
};

export const requestErrorHanlde = (
  error: AxiosError<{ msg: string; code: string }>
): ErrorInfo => {
  if (error.message && error.message === 'cancelAxios') {
    return { isCancel: true, code: -1, message: 'cancel request' };
  } else if (error.message && error.message === 'Network Error') {
    return { code: -2, message: '网络错误，请检查网络连接' };
  }
  const rsp = error.response;
  const status = rsp?.status || 404;
  if (rsp?.data && rsp.data.msg) {
    return { code: rsp.data.code, message: rsp.data.msg };
  }
  /** 查询默认字典无解析结果 走系统字典 */
  if (RespDictionary[status]) {
    return { code: status, message: RespDictionary[status] };
  }
  return { code: status, message: '网络错误，请检查网络连接' };
};
